package com.mintingi.pattern.strategy;

/**
 * <p>애플리케이션에 달라지는 부분을 찾아내고,
 * 달라지지 않는 부분으로 부터 분리시킨다.
 * 가장 바뀔 확률이 높은 부분을 중점적으로
 * 살펴보고 디자인 패턴을 적용</p>
 * 
 * @author mintingi
 *
 */
public class Car {

	/**
	 * 캡술화된 행동 인터페이스 변수
	 */
	private IBrakeBehavior brakeBehavior;
	
	/**
	 * Default 생성자
	 */
	public Car() {
		this(null);
	}
	
	/**
	 * 생성시 의존성 주입(Dependency Injection, DI)
	 * @param brakeBehavior
	 */
	public Car(IBrakeBehavior brakeBehavior) {
		this.brakeBehavior = brakeBehavior;
	}

	/**
	 * IBrakeBehavior 구현 행동 알고리즘 클래스 사용
	 * @return
	 */
	public IBrakeBehavior getBrakeBehavior() {
		return brakeBehavior;
	}

	/**
	 * setter 메서드를 이용하여 의존성 주입(Dependency Injection, DI)
	 * @param brakeBehavior
	 */
	public void setBrakeBehavior(IBrakeBehavior brakeBehavior) {
		this.brakeBehavior = brakeBehavior;
	}

}
